﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace iNet.Media.Imaging.Exif
{
	/// <summary>
	/// EXIF Tag 寫入器介面。
	/// </summary>
	public interface IExifTagWriter
	{
		/// <summary>
		/// 取得提供位元組轉換的 BitConverter。
		/// </summary>
		BitConverter BitConverter { get; }
		/// <summary>
		/// 將 EXIF Tag 寫入資料流。
		/// </summary>
		/// <param name="tagPositions">EXIF Tag 在資料流中的位置。</param>
		/// <exception cref="IOException">資料流存取錯誤。</exception>
		void Commit(out IDictionary<ExifTagKey, long> tagPositions);
		/// <summary>
		/// 取得資料流起始參考位置，資料位移的計算將參考此值。
		/// </summary>
		long ReferenceStreamPosition { get; }
		/// <summary>
		/// 準備寫入 EXIF Tag，但不會將實際資料寫入至資料流。
		/// </summary>
		/// <param name="tag">準備寫入的 EXIF Tag。</param>
		/// <exception cref="ArgumentException">相同 ID 的 EXIF Tag 已經被寫入。</exception>
		/// <exception cref="ArgumentNullException">tag 為 Null (Visual Basic 為 Nothing)。</exception>
		void WriteTag(ExifTag tag);
	}
}
